home *** CD-ROM | disk | FTP | other *** search
- 10 REM *** WPLOT by John Calder, Box 41-076, Auckland 3, NEW ZEALAND ***
- 20 REM *** phone 0064 - 9 - 828 2612 (Auckland 828 2612 or 3784160) ***
- 32 '
- 33 '*** 1st Dec 1995 - own text processor routine lines 24000 on
- 34 '*** gives more friendly input. Also response to [Esc]
- 60 '
- 70 DEFINT F-N
- 80 REM Reserve space for windows effect
- 90 DIM WGRSAVE%(12000), WCURSOR%(100)
- 95 DIM LENFIELD(14), DINPUT$(14, 29), DLINE$(28)
- 100 '
- 128 INSFLAG = 1 : KSOUND = 1
- 145 FOR J = 1 TO 24: DLINE$(J) = " ": NEXT J
- 180 KEY OFF
- 200 REM Set up function keys
- 210 KEY 1, " HELP" + CHR$(13)
- 220 KEY 2, "plot(1, 1)"
- 230 KEY 3, " EXIT" + CHR$(13) ' note 29/6/94 the space at the front
- 235 KEY 4, " DEMOs" + CHR$(13) ' of these for better response from the
- 240 KEY 5, " CLEAR" + CHR$(13) ' ERROR window, "press key to cont" bizzo
- 260 KEY 6, "line(0,0)-(5,5)"
- 270 KEY 7, "circle(3, 3),4"
- 280 KEY 8, "~"
- 290 KEY 9, "|"
- 300 KEY 10, "graphs" + CHR$(13)
- 5000 REM Set up limits for simplified graph
- 5005 ON ERROR GOTO 6100
- 5010 SCREEN 9
- 5012 ECC = .7: EGAFLAG$ = "YES": PL% = &HFFFF
- 5015 CLS
- 5017 ON ERROR GOTO 6000
- 5020 WINDOW (-6.9, -4.75)-(9.100001, 7.75)
- 5022 COLOR 15
- 5025 LINE (-6.9, 7.75)-(-6.7, 7.25), , BF
- 5030 GET (-6.9, 7.75)-(-6.7, 7.25), WCURSOR%
- 5040 COLOR 7: COLOR 14: PRINT "F1";
- 5041 COLOR 7: PRINT "="; : COLOR 14: PRINT "H";
- 5042 COLOR 7: PRINT "ELP";
- 5050 COLOR 14: PRINT " F2";
- 5051 COLOR 7: PRINT "="; : COLOR 14: PRINT "plot";
- 5060 COLOR 14: PRINT " F3";
- 5061 COLOR 7: PRINT "="; : COLOR 14: PRINT "E";
- 5062 COLOR 7: PRINT "XIT";
- 5063 COLOR 14: PRINT " F4";
- 5064 COLOR 7: PRINT "="; : COLOR 14: PRINT "DEMOs";
- 5065 COLOR 14: PRINT " F5";
- 5067 COLOR 7: PRINT "="; : COLOR 14: PRINT "C";
- 5068 COLOR 7: PRINT "LEAR";
- 5070 COLOR 14: PRINT " F6";
- 5072 COLOR 7: PRINT "="; : COLOR 14: PRINT "line";
- 5075 COLOR 14: PRINT " F7";
- 5077 COLOR 7: PRINT "="; : COLOR 14: PRINT "circle";
- 5080 LOCATE 3, 1
- 5085 COLOR 14: PRINT "F8";
- 5087 COLOR 7: PRINT "="; : COLOR 14: PRINT "clear line";
- 5090 COLOR 14: PRINT " F9";
- 5092 COLOR 7: PRINT "="; : COLOR 14: PRINT "copy line";
- 5095 COLOR 14: PRINT " F10";
- 5096 COLOR 7: PRINT "="; : COLOR 14: PRINT "graphs of equations";
- 5097 COLOR 14: PRINT " s";
- 5098 COLOR 7: PRINT "="; : COLOR 14: PRINT "sound off/on";
- 5099 '
- 5100 REM Set up grid lines
- 5105 COLOR 3
- 5110 FOR Y = -4 TO 7
- 5130 LINE (-6.9, Y)-(9.100001, Y), , , PL%
- 5140 NEXT Y
- 5150 FOR X = -6 TO 8
- 5160 LINE (X, -4.75)-(X, 7.75), , , PL%
- 5180 NEXT X
- 5190 REM
- 5200 REM start of graph axes draw
- 5205 COLOR 11
- 5210 REM set up axes
- 5220 LINE (-6.9, 0)-(9.100001, 0)
- 5230 IF EGAFLAG$ = "YES" THEN LINE (0, -4.75)-(0, 7.75) ELSE LINE (0, -4.75)-(0, 7.75), , , &HFEFE
- 5250 REM Axes labels go here
- 5255 TEXTLINE = 0
- 5260 FOR YLABEL = 7 TO 1 STEP -1
- 5265 TEXTLINE = TEXTLINE + 2
- 5270 LOCATE TEXTLINE, 33: PRINT STR$(YLABEL)
- 5275 NEXT YLABEL
- 5290 LOCATE 16, 35: PRINT "0"
- 5300 COLUMN = 0
- 5301 FOR XLABEL = -6 TO -1
- 5302 COLUMN = COLUMN + 5
- 5303 LOCATE 16, COLUMN - 2: PRINT " " + STR$(XLABEL)
- 5304 NEXT XLABEL
- 5310 COLUMN = 34
- 5311 FOR XLABEL = 1 TO 8
- 5312 COLUMN = COLUMN + 5
- 5313 LOCATE 16, COLUMN: PRINT STR$(XLABEL)
- 5314 NEXT XLABEL
- 5320 FOR YLABEL = -1 TO -4 STEP -1
- 5322 TEXTLINE = 16 - 2 * YLABEL
- 5323 LOCATE TEXTLINE, 32: PRINT " "; STR$(YLABEL);
- 5325 NEXT YLABEL
- 5330 IF DEMOFLAG$ = "YES" THEN DEMOFLAG$ = "NO": GOTO 10300
- 5332 COLOR 11: LOCATE 15, 1: PRINT "DRAW-BY-PLOT" ;
- 5335 LOCATE 17, 1: PRINT "Enter your command below" ;
- 5340 FOR F = 1 TO 14: FOR J = 1 TO 29: DINPUT$(F, J) = " ": NEXT J: NEXT F
- 5342 LOCATE 25, 1
- 5344 IF INSFLAG=1 THEN PRINT"[ INSERT active ]";:ELSE PRINT"[ INSERT off ] ";
- 5350 COLOR 14: F = 9
- 5400 '********** start of main input routine *******************************
- 5410 KCOL = 1: LENFIELD(F) = 1
- 5420 GOSUB 24000
- 5428 IF HELPFLAG% = 1 THEN PUT (1.5, -3.75), WGRSAVE%, PSET: HELPFLAG% = 0
- 5458 '*** now for some answer analysis
- 5470 IF FUNCTION$ = "S" + SPACE$(27) THEN 6300 '**** sound on or off
- 5472 IF INSTR(FUNCTION$, "PLAY")=0 AND KSOUND=1 THEN PLAY "MBo4l16cdefefef"
- 5475 IF INSTR(FUNCTION$, "DEMO") > 0 THEN 10000
- 5476 IN3$ = LEFT$(FUNCTION$, 1)
- 5478 IF IN3$ = "H" THEN 8000
- 5480 IF INSTR(FUNCTION$, "HELP") > 0 THEN 8000
- 5483 IF INSTR(FUNCTION$, "EXIT") > 0 THEN 9100
- 5484 IF INSTR(FUNCTION$, "CLEAR") > 0 THEN CLS : GOTO 5020
- 5485 IF INSTR(FUNCTION$, "///") > 0 THEN SCREEN 8: ECC = .4: GOTO 5020
- 5486 IF INSTR(FUNCTION$, "GUIDE") > 0 THEN GOTO 9500
- 5487 IF INSTR(FUNCTION$, "CGA") > 0 THEN SCREEN 2: ECC = .4: EGAFLAG$ = "NO": PL% = &HF0F0: GOTO 5020
- 5490 IF INSTR(FUNCTION$, "GRAPH") > 0 THEN GOTO 9600
- 5500 '**** Command analysis and execution *****
- 5502 '
- 5506 '**** fix behaviour of PRINT
- 5510 P% = INSTR(FUNCTION$, "PRINT") : P2% = INSTR(FUNCTION$, "?")
- 5520 IF P% = 0 AND P2% = 0 THEN GOTO 5550
- 5530 FUNCTION$ = "PRINT: " + FUNCTION$ : IF F<14 THEN F = F + 1
- 5540 GOTO 5700
- 5550 '**** analysis and sorting of CIRCLE command
- 5553 P% = INSTR(FUNCTION$, "CIRCLE")
- 5557 IF P% = 0 THEN GOTO 5600
- 5560 FC$ = FUNCTION$: PCOMMA% = 0
- 5562 FOR NCOMMA% = 0 TO 5
- 5564 PCOMMA% = INSTR(PCOMMA% + 1, FUNCTION$, ",")
- 5567 IF PCOMMA% = 0 THEN GOTO 5580
- 5570 NEXT NCOMMA%
- 5575 FUNCTION$ = LEFT$(FUNCTION$, PPREV%) + STR$(VAL(MID$(FUNCTION$, PPREV% + 1)) * ECC): GOTO 5700
- 5580 FOR I% = 1 TO 6 - NCOMMA%
- 5585 FUNCTION$ = FUNCTION$ + ","
- 5590 NEXT I%
- 5593 ' And the climax of 5500-5600 is the eccentricity correction
- 5595 FUNCTION$ = FUNCTION$ + STR$(ECC)
- 5597 GOTO 5700
- 5600 '*** Customised PLOT command is more like familiar maths than the
- 5610 ' standard PSET
- 5620 P% = INSTR(FUNCTION$, "PLOT")
- 5682 IF P% = 0 THEN GOTO 5700
- 5684 FUNCTION$ = "PSET" + MID$(FUNCTION$, P% + 4)
- 5686 OPEN "O", #1, "FUNCTION.BAS"
- 5687 F$ = "5690 " + "ON ERROR GOTO 6000: WINDOW(-6.9,-4.75)-(9.1, 7.75) :" + FUNCTION$
- 5688 PRINT #1, F$: CLOSE #1
- 5689 CHAIN MERGE "FUNCTION.BAS" ,5690,ALL
- 5690 ON ERROR GOTO 6000: WINDOW(-6.9,-4.75)-(9.100001, 7.75) :PSET(1, 1)
- 5692 X = POINT(2): Y = POINT(3)
- 5694 LINE (X - .15, Y - .15)-(X + .15, Y + .15)
- 5695 LINE (X + .15, Y - .15)-(X - .15, Y + .15)
- 5696 GOTO 5400
- 5698 'END of routine for plotting a clearer point
- 5699 '
- 5700 OPEN "O", #1, "FUNCTION.BAS"
- 5710 F$ = "5750 " + "ON ERROR GOTO 6000 : WINDOW(-6.9,-4.75)-(9.1,7.75) : " + FUNCTION$
- 5720 PRINT #1, F$
- 5730 CLOSE #1
- 5740 CHAIN MERGE "FUNCTION.BAS" ,5750,ALL
- 5750 ON ERROR GOTO 6000 : WINDOW(-6.9,-4.75)-(9.100001,7.75) : PAINT(5,4),"ROD",14
- 5760 GOTO 5400
- 5770 REM hard lesson learned on preserving variables 21/8/92
- 5771 REM in CHAIN MERGE filename,linenumber,ALL <-- is vital!
- 5772 '
- 6000 '**** 6000-7000 Command error handlers and management routines
- 6010 IF ERR = 5 THEN RESUME NEXT
- 6012 IF ERL = 5690 OR ERL = 5750 THEN RESUME 8700
- 6015 IF ERR = 70 THEN RESUME 6200
- 6020 CLS : PRINT
- 6030 PRINT "Exit due to error "; ERR; " at line "; ERL
- 6040 PRINT
- 6050 PRINT "Please note these values and tell us about it"
- 6060 PRINT
- 6070 PRINT "Press any key to exit from this unhappy state of affairs"
- 6075 PRINT "and it should be safe to re-start and continue with your work."
- 6080 AK$ = INKEY$: IF AK$ = "" THEN 6080
- 6085 SYSTEM
- 6090 '
- 6100 '*** Graphics screen availability response
- 6110 SCREEN 2
- 6120 ECC = .4: PL% = &HF0F0
- 6140 RESUME 5015
- 6150 '
- 6200 '*** Response to disk write-protected
- 6201 ' start with saving the screen graphics display
- 6220 GET (1.5, 1.25)-(8.3, -3.75), WGRSAVE%
- 6230 LINE (1.5, 1.25)-(8.3, -3.75), 4, BF
- 6250 LOCATE 15, 44: PRINT " ERROR - disk 'write-protected' "
- 6252 LOCATE 16, 44: PRINT " "
- 6253 LOCATE 17, 44: PRINT " Please remove the disk and "
- 6254 LOCATE 18, 44: PRINT " slide the little cover over "
- 6255 LOCATE 19, 44: PRINT " the hole in the corner. "
- 6256 LOCATE 20, 44: PRINT " "
- 6257 LOCATE 21, 44: PRINT " Then put the disk back in and "
- 6258 LOCATE 22, 44: : PRINT " press ENTER key to continue... "
- 6260 AK$ = INKEY$: IF AK$ = "" THEN 6260
- 6270 PUT (1.5, -3.75), WGRSAVE%, PSET '*** restore screen to its former glory
- 6280 LOCATE ILINE%, 1: GOTO 5400
- 6290 '
- 6300 '*** toggle sound, KSOUND=1 for ON , =0 for OFF , new 1-1-95
- 6310 IF KSOUND=1 THEN 6350
- 6320 KSOUND = 1
- 6330 LOCATE CSRLIN,1 : PRINT "SOUND ON " ;
- 6335 PLAY "MBo4l16cdefefef"
- 6340 GOTO 5400
- 6350 KSOUND = 0
- 6360 LOCATE CSRLIN,1 : PRINT "SOUND OFF " ;
- 6370 GOTO 5400
- 8000 REM ****************** HELP routines *******************
- 8100 REM Create HELP window, start by saving graphics
- 8110 REM Area involved is TEXTLINES 14 to 23 COLS 47 to 78
- 8120 REM Corresponding SIMPLOT points are (1.5 , 1.25) - (8.3 , -3.75)
- 8200 REM start with saving the screen graphics display
- 8220 GET (1.5, 1.25)-(8.3, -3.75), WGRSAVE%
- 8230 LINE (1.5, 1.25)-(8.3, -3.75), 2, BF
- 8250 LOCATE 15, 44: PRINT " FOR EXAMPLE: to plot points "
- 8252 LOCATE 16, 44: PRINT " plot(1,1) "
- 8253 LOCATE 17, 44: PRINT " plot(-4, 3) "
- 8254 LOCATE 18, 44: PRINT " plot(0.3, 1.7) "
- 8255 LOCATE 19, 44: PRINT " FOR EXAMPLE: to draw lines "
- 8256 LOCATE 20, 44: PRINT " line(3,3)-(7,1) "
- 8257 LOCATE 21, 44: PRINT " line(-2,-2)-(4,-3) "
- 8258 LOCATE 22, 44: : PRINT " press ENTER key to continue... "
- 8270 A$ = INKEY$: IF A$ = "" THEN 8270
- 8300 LOCATE 15, 44: PRINT " CIRCLES: give centre and radius"
- 8301 LOCATE 16, 44: PRINT " circle(0,0),1 "
- 8302 LOCATE 17, 44: PRINT " circle(4,4),2 "
- 8303 LOCATE 18, 44: PRINT " circle(-4.25,-3.1),2.75 "
- 8304 LOCATE 19, 44: PRINT " "
- 8305 LOCATE 20, 44: PRINT " Press Enter key to go to work.."
- 8306 LOCATE 21, 44: PRINT " OR "
- 8307 LOCATE 22, 44: PRINT " F1=more help F4=DEMOs "
- 8310 A$ = INKEY$: IF A$ = "" THEN 8310
- 8320 REM I want this window to stay on-screen as
- 8325 REM student makes first attempts
- 8330 HELPFLAG% = 1
- 8333 LOCATE 20, 44: COLOR 15: PRINT " "
- 8334 LOCATE 21, 44: COLOR 15: PRINT " "
- 8335 LOCATE 22, 44: COLOR 15: PRINT " NOW ENTER YOUR COMMAND... "
- 8340 LOCATE HLINE%, 1: GOTO 5400
- 8700 REM *******SUBROUTINE for when students mis enter commands ************
- 8701 ON ERROR GOTO 6000 '*** refresh required after diversion here
- 8702 PLAY "MBo2l8FCDAGGGGo4BAGFE"
- 8703 REM start with saving the screen graphics display
- 8705 GET (1.5, 1.25)-(8.3, -3.75), WGRSAVE%
- 8707 LINE (1.5, 1.25)-(8.3, -3.75), 4, BF
- 8710 COLOR 14
- 8711 LOCATE 15, 44: PRINT " Error message "
- 8712 LOCATE 16, 44: PRINT " "
- 8713 LOCATE 17, 44: PRINT " There is something wrong with "
- 8714 LOCATE 18, 44: PRINT " the setting-out of your command"
- 8715 LOCATE 19, 44: PRINT " "
- 8716 LOCATE 20, 44: PRINT " Please try again... "
- 8717 LOCATE 21, 44: PRINT " "
- 8718 LOCATE 22, 44: COLOR 15: PRINT "PRESS ANY KEY TO CONTINUE "
- 8740 A$ = INKEY$: IF A$ = "" THEN 8740
- 8750 HELPFLAG% = 1
- 8755 LOCATE 22, 44: : PRINT " Now enter your command... "
- 8757 COLOR 14: LOCATE ILINE%, 1
- 8760 GOTO 5400
- 8790 '
- 8990 ' ************** END of HELP routines ****************
- 8995 '
- 9000 ' **********SCREEN CLEAR and EXIT routines ***********
- 9010 '
- 9020 '*** SCREEN CLEAR
- 9030 GOTO 5000
- 9090 REM
- 9100 REM EXIT routine
- 9110 SCREEN 1: COLOR , 2
- 9120 PRINT
- 9130 PRINT " EXITING from DRAW-BY-PLOT"
- 9160 T1 = TIMER
- 9165 IF TIMER - T1 < 2 THEN 9165
- 9200 SCREEN 0: WIDTH 80: SYSTEM
- 9500 '
- 9510 '*** call up guide screen
- 9520 SHELL "PAGER WPLOT.TXT"
- 9540 GOTO 5000
- 9600 '******* SIMPLOT on F10
- 9650 COLOR 15 : LOCATE CSRLIN,1 : PLAY "MBl10o5co4bagfedc"
- 9660 PRINT "**** loading GRAPH PLOTTING programme ****";
- 9670 RUN "SIMPLOT"
- 10000 REM ****************** DEMO routines *******************
- 10100 REM Create DEMO intro window, although sim to HELP save graphics not req
- 10110 REM Area involved is TEXTLINES 9 to 20 COLS 42 to 78
- 10120 REM Corresponding WINDOW points are (0.9 ,-2.75) - (8.9 , 4.3)
- 10230 LINE (.9, -2.75)-(8.899999, 4.3), 6, BF
- 10240 COLOR 11
- 10250 LOCATE 9, 42: PRINT " DEMOs start simple and work up "
- 10252 LOCATE 10, 42: PRINT " "
- 10253 LOCATE 11, 42: PRINT " 1. simple triangle "
- 10254 LOCATE 12, 42: PRINT " 2. 3 circles side-by-side "
- 10255 LOCATE 13, 42: PRINT " 3. 3 and 4 sided figures "
- 10256 LOCATE 14, 42: PRINT " 4. winged trophy "
- 10257 LOCATE 15, 42: PRINT " 5. circles inside circles "
- 10258 LOCATE 16, 42: PRINT " 6. circles linked on diagonal "
- 10259 LOCATE 17, 42: PRINT " 7. variable with a formula "
- 10260 LOCATE 18, 42: PRINT " 8. music "
- 10261 LOCATE 19, 42: PRINT " 9. exit demo "
- 10262 LOCATE 20, 42: PRINT " type 1..8 to choose your demo "
- 10270 A$ = INKEY$: IF A$ = "" THEN 10270
- 10280 IA = VAL(A$) : IF IA > 0 THEN 10290 ELSE CLS : GOTO 5020
- 10290 IF IA<9 THEN CLS : DEMOFLAG$ = "YES": GOTO 5020
- 10300 ON VAL(A$) GOTO 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000
- 11000 '***** DEMO of simple triangle
- 11010 COLOR 11
- 11020 LOCATE 17, 1: PRINT "Run commands one at a time with Enter key"
- 11030 COLOR 14
- 11040 LOCATE 18, 1: PRINT "line(0,4)-(2,7)"
- 11050 LOCATE 19, 1: PRINT "line(2,7)-(9,1)"
- 11060 LOCATE 20, 1: PRINT "line(9,1)-(0,4)"
- 11070 LOCATE 21, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(5,3),12,14" ELSE PRINT "paint(5.1,3.1)"
- 11080 FSTART = 9: FSTOP = 12: GOSUB 20000
- 11200 GOTO 5400
- 12000 '***** DEMO of 3 circles side-by-side
- 12020 LOCATE 15, 1: PRINT "Run commands one at a time"
- 12030 COLOR 14
- 12040 LOCATE 17, 1: PRINT "circle(2,3),2"
- 12050 LOCATE 18, 1: PRINT "circle(6,3),2"
- 12060 LOCATE 19, 1: PRINT "circle(-2,3),2"
- 12070 LOCATE 20, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(-2,3),12,14" ELSE PRINT "paint(-2.1,3.1)"
- 12080 LOCATE 21, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(2,3),10,14" ELSE PRINT "paint(2.1,3.1)"
- 12090 LOCATE 22, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(6,3), 9,14" ELSE PRINT "paint(6.1,3.1)"
- 12100 FSTART = 8: FSTOP = 13: GOSUB 20000
- 12200 GOTO 5400
- 13000 '***** DEMO of 3 and 4-sided figures
- 13010 COLOR 11
- 13020 LOCATE 13, 1: PRINT "Run commands one at a time"
- 13030 COLOR 14
- 13040 LOCATE 14, 1: PRINT "line(-5,4)-(-5.5,7.5)"
- 13050 LOCATE 15, 1: PRINT "line(-5.5,7.5)-(-2,7)"
- 13060 LOCATE 17, 1: PRINT "line(-2,7)-(-5,4)"
- 13070 LOCATE 18, 1: PRINT "line(-4,5)-(4,-3)"
- 13080 LOCATE 19, 1: PRINT "line(4,-3)-(5,-2)"
- 13090 LOCATE 20, 1: PRINT "line(5,-2)-(-3,6)"
- 13100 LOCATE 21, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(-4,6),10,14" ELSE PRINT "paint(-4.1,6.1)"
- 13110 LOCATE 22, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(1,1),13,14" ELSE PRINT "paint(1.1,1.1)": LOCATE 23, 1: PRINT "paint(-1.1,3.1)"
- 13190 FSTART = 6: FSTOP = 13: GOSUB 20000
- 13300 GOTO 5400
- 14000 '***** DEMO of 'Winged Trophy'
- 14010 COLOR 11
- 14020 LOCATE 8, 1: PRINT "Run commands one at a time"
- 14030 COLOR 14
- 14040 LOCATE 9, 1: PRINT "circle(0,4),2"
- 14050 LOCATE 10, 1: PRINT "line(2,4)-(4,7)"
- 14060 LOCATE 11, 1: PRINT "line(4,7)-(7,0)"
- 14070 LOCATE 12, 1: PRINT "line(7,0)-(2,4)"
- 14080 LOCATE 13, 1: PRINT "line(-1,2.3)-(1,-3),14,b"
- 14090 LOCATE 14, 1: PRINT "line(-3,-3)-(3,-4),14,b"
- 14100 LOCATE 15, 1: PRINT "line(-2,4)-(-4,7)"
- 14110 LOCATE 17, 1: PRINT "line(-4,7)-(-7,0)"
- 14120 LOCATE 18, 1: PRINT "line(-7,0)-(-2,4)"
- 14200 LOCATE 19, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(-4,4),13,14" ELSE PRINT "paint(-4.1,5.1)"
- 14210 LOCATE 20, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(4,4),13,14" ELSE PRINT "paint(4.1,5.1)"
- 14220 LOCATE 21, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(0,4),12,14" ELSE PRINT "paint(0.1,4.1)"
- 14230 LOCATE 22, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(0,0), 9,14" ELSE PRINT "paint(0.1,0.1)"
- 14240 LOCATE 23, 1: IF EGAFLAG$ = "YES" THEN PRINT "paint(0,-3.5),11,14" ELSE PRINT "paint(0.1,-3.5)"
- 14300 COLOR 11
- 14320 LOCATE 18, 38: PRINT "Note the 'line' commands with extra ,14,b"
- 14330 LOCATE 19, 38: PRINT " b stands for 'box' "
- 14340 LOCATE 20, 38: PRINT " 14 is the colour code for a yellow line "
- 14350 IF EGAFLAG$ = "YES" THEN GOTO 14400
- 14360 LOCATE 21, 38: PRINT "Your screen is black and white but you "
- 14370 LOCATE 22, 38: PRINT "still need to be aware of the color code ";
- 14380 LOCATE 23, 38: PRINT "space and at the very least give the ";
- 14390 LOCATE 24, 38: PRINT "extra comma. ";
- 14400 FSTART = 1: FSTOP = 14: GOSUB 20000
- 14500 COLOR 14: GOTO 5400
- 15000 '***** DEMO of concentric circles
- 15010 COLOR 11
- 15020 LOCATE 11, 1: PRINT "Run commands one at a time"
- 15025 PRINT "using the Enter key"
- 15030 COLOR 14
- 15040 PRINT "circle(2,3),1"
- 15050 PRINT "circle(2,3),2"
- 15060 PRINT "circle(2,3),3"
- 15070 LOCATE 17, 1: PRINT "circle(2,3),4"
- 15080 PRINT "circle(2,3),5"
- 15100 IF EGAFLAG$ = "YES" THEN GOTO 15200
- 15110 LOCATE 19, 1: PRINT "paint(2.1,3.1)"
- 15120 PRINT "paint(4.5,3.1)"
- 15130 PRINT "paint(6.5,3.1)"
- 15150 GOTO 15300
- 15200 LOCATE 19, 1: PRINT "paint(2,3),12,14"
- 15210 PRINT "paint(3.5,3), 9,14"
- 15220 PRINT "paint(4.5,3),10,14"
- 15230 PRINT "paint(5.5,3), 6,14"
- 15240 PRINT "paint(6.5,3),11,14"
- 15290 FSTART = 5: FSTOP = 14: GOSUB 20000
- 15300 GOTO 5400
- 16000 '***** DEMO of dumb-bell shape
- 16010 COLOR 11
- 16020 LOCATE 14, 1: PRINT "Run commands one at a time"
- 16025 PRINT "using the Enter key"
- 16030 COLOR 14
- 16050 LOCATE 17, 1: PRINT "circle(-4,5),2"
- 16060 PRINT "circle(2,-1),3"
- 16070 PRINT "line(-2.2,4.2)-(0.4,1.6)"
- 16080 PRINT "line(-3.2,3.2)-(-0.6,0.6)"
- 16100 IF EGAFLAG$ = "YES" THEN GOTO 16200
- 16110 PRINT "paint(-4.1,5.1)"
- 16120 PRINT "paint(-1.1,2.1)"
- 16130 PRINT "paint(2.1,-1.1)"
- 16150 GOTO 16300
- 16200 '**** option for EGA and above available
- 16210 PRINT "paint(-4,5),10,14"
- 16220 PRINT "paint(-1,2),14,14"
- 16230 PRINT "paint(2,-1),10,14"
- 16290 FSTART = 8: FSTOP = 14: GOSUB 20000
- 16300 GOTO 5400
- 17000 '***** DEMO of variable substituted for in a formula
- 17001 COLOR 15
- 17002 LOCATE 5, 1
- 17003 PRINT "This demo gives a result as a number value after 4 steps, giving an example"
- 17004 PRINT "of the important Maths idea of using a VARIABLE in an EQUATION or FORMULA"
- 17005 PRINT "that you can then SUBSTITUTE VALUES for. "
- 17006 PRINT SPACE$(60)
- 17007 PRINT "Here you have the FORMULA for area of a circle featuring the variable r "
- 17008 PRINT "Note that when the formula works out a VALUE for area, the answer stays"
- 17009 PRINT "inside the computer. You will not see any result until you work through to"
- 17010 PRINT "the PRINT command which makes it come up on the screen."
- 17011 LOCATE 24, 1
- 17012 PRINT "On this system * is used for 'times' to avoid mix-ups with the letter x ";
- 17013 LOCATE 25, 1
- 17014 PRINT "After your first run, change the 2 in r = 2 to other values and run again.";
- 17015 COLOR 10
- 17020 LOCATE 14, 1: PRINT "Run commands one at a time"
- 17025 PRINT "using the Enter key "
- 17026 PRINT SPACE$(60)
- 17030 COLOR 14
- 17050 LOCATE 17, 1: PRINT "pi = 3.14159"
- 17060 PRINT "r = 2"
- 17070 IF EGAFLAG$ = "YES" THEN PRINT "area = pi * r"; CHR$(253) ELSE PRINT "area = pi * r^2"
- 17080 PRINT "print area"
- 17090 FSTART = 8: FSTOP = 11: GOSUB 20000
- 17200 GOTO 5400
- 18000 '***** music
- 18002 COLOR 15
- 18003 LOCATE 5, 1
- 18004 PRINT "This demo lets you experiment with playing music on the system. "
- 18005 PRINT "It does not draw any shapes."
- 18006 PRINT "The first line plays a simple scale, but listen for the last c note "
- 18007 PRINT "going too low. This is corrected in the following line by going up"
- 18008 PRINT "to the c in the next octave. Unless you change octaves, the notes"
- 18009 PRINT "come from the middle of a keyboard. The computer system calls this o4 "
- 18010 PRINT "for OCTAVE 4 . "
- 18011 PRINT "Notice how I get higher notes with o5 and lower ones with o2 and o3 "
- 18012 PRINT "The l (for length) values control the length of notes. "
- 18013 PRINT "Higher values like l16 make for shorter notes that play faster music. "
- 18015 COLOR 10
- 18020 LOCATE 17, 1: PRINT "Run commands one at a time with Enter key"
- 18030 COLOR 14
- 18040 LOCATE 18, 1: PRINT "play"; CHR$(34); "cdefgabc"; CHR$(34)
- 18050 LOCATE 19, 1: PRINT "play"; CHR$(34); "cdefgab o5 c"; CHR$(34)
- 18060 LOCATE 20, 1: PRINT "play"; CHR$(34); "dcdcfgababbb o5 c"; CHR$(34)
- 18070 LOCATE 21, 1: PRINT "play"; CHR$(34); "l16 dcdcfgabbb"; CHR$(34)
- 18080 LOCATE 22, 1: PRINT "play"; CHR$(34); "l12 dcdc o2 fgabbb o3 c"; CHR$(34)
- 18090 FSTART = 9: FSTOP = 13: GOSUB 20000
- 18200 GOTO 5400
- 19000 '***** EXIT DEMO
- 19010 CLS : GOTO 5020
- 19990 '
- 20000 '***** SUBROUTINE TO HANDLE pre-printed input
- 20010 FOR F = FSTART TO FSTOP
- 20020 IF F < 8 THEN KLINE = F + 8 ELSE KLINE = F + 9
- 20030 FOR J = 1 TO 28
- 20040 IA = SCREEN(KLINE, J): IF IA = 0 THEN IA = 32
- 20050 DINPUT$(F, J) = CHR$(IA)
- 20060 NEXT J
- 20070 NEXT F
- 20080 F = FSTART
- 20090 RETURN
- 20100 '
- 24000 REM ************ Start of screen input routine *****************
- 24460 IF F < 8 THEN KLINE = F + 8 ELSE KLINE = F + 9
- 24465 LOCATE KLINE, 1
- 24470 PUT (-6.9 + (KCOL - 1) * .2, 7.75 - KLINE * .5), WCURSOR%, XOR
- 24480 LOCATE KLINE, KCOL
- 24500 AK$ = INKEY$: IF AK$ = "" THEN 24500
- 24502 PUT (-6.9 + (KCOL - 1) * .2, 7.75 - KLINE * .5), WCURSOR%, XOR
- 24505 IA = ASC(AK$)
- 24510 IF IA >= 32 THEN 24550
- 24520 IF IA = 27 THEN 9100: REM 27 is ESCape key *****************
- 24525 IF IA = 13 THEN 26000: REM input completed and checked on ENTER
- 24530 IF IA = 0 THEN 25000: REM arrow keys, insert, delete
- 24535 IF IA = 8 THEN 25500: REM Backspace key
- 24540 IF IA = 9 THEN F = F + 1: GOTO 24650: REM Tab key
- 24545 GOTO 24000
- 24550 IF AK$ = "~" THEN 25950: REM F8 clear field line
- 24560 IF AK$ = "|" THEN 26400 '*** F9 for copy line
- 24600 IF INSFLAG = 1 THEN GOSUB 25700: LOCATE KLINE, KCOL '*** insert procedure
- 24605 DINPUT$(F, KCOL) = AK$
- 24610 PRINT DINPUT$(F, KCOL);
- 24612 IF LENFIELD(F) < KCOL THEN LENFIELD(F) = KCOL
- 24615 KCOL = KCOL + 1
- 24620 IF KCOL > 28 THEN KCOL = 28
- 24640 REM **** return from subroutines handling tab and up/down arrow keys **
- 24650 IF F = 15 THEN F = 9
- 24660 IF F = 0 THEN F = 14
- 24760 GOTO 24000
- 24800 '**********
- 25000 REM ************** arrow and tab key analysis ********************
- 25003 IF ASC(RIGHT$(AK$, 1)) = 77 THEN 24615: REM Right Arrow
- 25010 IF ASC(RIGHT$(AK$, 1)) = 75 THEN 25200: REM Left Arrow
- 25020 IF ASC(RIGHT$(AK$, 1)) = 80 THEN 25300: REM Down Arrow
- 25030 IF ASC(RIGHT$(AK$, 1)) = 72 THEN 25400: REM Up Arrow
- 25040 IF ASC(RIGHT$(AK$, 1)) = 15 THEN 25400: REM Shift Tab
- 25050 IF ASC(RIGHT$(AK$, 1)) = 71 THEN KCOL = 1: GOTO 24470 '*** Home arrow
- 25060 IF ASC(RIGHT$(AK$, 1)) = 79 THEN 25800: REM END arrow
- 25070 IF ASC(RIGHT$(AK$, 1)) = 83 THEN 25550: REM Delete key
- 25080 IF ASC(RIGHT$(AK$, 1)) = 82 THEN 25600: REM Insert key procedure & flag
- 25200 REM ************* Left Arrow ****************
- 25205 IF KCOL > 1 THEN KCOL = KCOL - 1
- 25220 GOTO 24470
- 25300 REM ************* Down Arrow ****************
- 25310 F = F + 1
- 25320 GOTO 24650
- 25400 REM ************* Up Arrow or Shift Tab ****************
- 25410 F = F - 1
- 25420 GOTO 24650
- 25500 REM ************* Backspace Key - Delete comes in at 25550 *******
- 25510 IF KCOL = 1 THEN GOTO 24470
- 25515 KCOL = KCOL - 1
- 25520 LOCATE KLINE, KCOL
- 25550 FOR J = KCOL TO 28
- 25555 DINPUT$(F, J) = DINPUT$(F, J + 1): PRINT DINPUT$(F, J);
- 25560 NEXT J
- 25565 LENFIELD(F) = LENFIELD(F) - 1
- 25570 GOTO 24470
- 25600 REM **** Insert Key - main entry control flag and indicator ******
- 25610 IF INSFLAG = 1 THEN 25650
- 25615 INSFLAG = 1
- 25620 LOCATE 25, 1: PRINT "[ INSERT active ]";
- 25630 GOTO 24470
- 25650 INSFLAG = 0
- 25660 LOCATE 25, 1: COLOR 15: PRINT "[ insert OFF ]";
- 25670 GOTO 24470
- 25700 REM ***** Insert Key - text shift sub to ref from main sequence ***
- 25740 LFLAG = 0
- 25750 FOR J = 28 TO KCOL + 1 STEP -1
- 25755 DINPUT$(F, J) = DINPUT$(F, J - 1)
- 25756 IF DINPUT$(F, J) <> " " THEN LFLAG = 1
- 25757 LOCATE KLINE, J: PRINT DINPUT$(F, J);
- 25760 NEXT J
- 25770 IF LFLAG = 1 THEN LENFIELD(F) = LENFIELD(F) + 1
- 25790 RETURN '*** TO 24700
- 25800 REM ************* END Arrow ****************
- 25805 IF LENFIELD(F) > 27 THEN LENFIELD(F) = 27
- 25807 IF LENFIELD(F) < 1 THEN LENFIELD(F) = 1
- 25810 KCOL = LENFIELD(F) + 1
- 25820 GOTO 24470
- 25830 REM
- 25950 REM ************* CLEAR field line ****************
- 25960 FOR J = 1 TO 28: DINPUT$(F, J) = " ": NEXT J
- 25980 LOCATE KLINE, 1: PRINT SPACE$(28)
- 25985 LENFIELD(F) = 1
- 25995 GOTO 24460
- 26000 '******* finish this input routine by analysing the *****
- 26001 '******* individual DINPUT$ characters then assembling them *****
- 26002 '******* into FUNCTION$ via assembly process array DLINE$() *****
- 26020 FUNCTION$ = ""
- 26030 FOR I = 1 TO 28
- 26050 '*** IF DINPUT$(F, I) = " " THEN 26150
- 26100 KCHR = ASC(DINPUT$(F, I))
- 26110 IF KCHR >= 97 AND KCHR <= 122 THEN KCHR = KCHR - 32
- 26113 IF KCHR = 91 OR KCHR = 123 THEN KCHR = 40
- 26117 IF KCHR = 93 OR KCHR = 125 THEN KCHR = 41
- 26120 DLINE$(I) = CHR$(KCHR)
- 26130 IF DLINE$(I) = "²" THEN DLINE$(I) = "^2"
- 26135 IF INSTR("XST(", DLINE$(I)) <> 0 THEN GOSUB 26291 '*** PLAY ref
- 26140 FUNCTION$ = FUNCTION$ + DLINE$(I)
- 26150 NEXT I
- 26170 FPREV = F: F = F + 1: KCOL = 1: IF F = 15 THEN F = 9
- 26190 RETURN
- 26200 '
- 26290 REM **** SUBROUTINE FOR mx ---> m*x ********
- 26291 J = I - 1: IF J = 0 THEN RETURN
- 26292 IF DLINE$(J) = " " THEN 26293 ELSE 26294
- 26293 J = J - 1: IF J = 0 THEN RETURN ELSE 26292
- 26294 IF INSTR("1234567890)X", RIGHT$(DLINE$(J), 1)) = 0 THEN RETURN
- 26295 DLINE$(I) = "*" + DLINE$(I)
- 26296 RETURN
- 26300 '
- 26400 '******* SUBROUTINE for COPY LINE on F9 *****
- 26410 LOCATE KLINE, 1: PRINT SPACE$(28); : LOCATE KLINE, 1
- 26420 FOR I = 1 TO 28
- 26430 DINPUT$(F, I) = DINPUT$(FPREV, I): PRINT DINPUT$(F, I);
- 26440 NEXT I
- 26450 LENFIELD(F) = LENFIELD(FPREV)
- 26455 IF LENFIELD(F) > 23 THEN LENFIELD(F) = 23
- 26460 KCOL = LENFIELD(F) + 1
- 26470 GOTO 24470